package com.xinqi.modules.exam.student.dto.rsp;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.xinqi.common.core.jackson.ScoreJacksonSerialize;
import com.xinqi.modules.exam.student.dto.PaperAnswerDTO;
import com.xinqi.modules.exam.student.enums.PaperAnswerStatusEnum;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 课程测评学生答题-响应对象
 *
 * @author: linkai
 * @date: 2023/07/02
 */
@Data
@Schema(description = "课程测评学生答题-响应对象")
public class CourseExamPaperStudentResultDTO implements Serializable {
    /**
     * 主键
     */
    @Schema(description = "主键", example = "")
    private Long id;
    /**
     * 租户ID
     */
    @Schema(description = "租户ID", example = "")
    private Long tenantId;
    /**
     * 创建者
     */
    @Schema(description = "创建者", example = "")
    private Long createBy;
    /**
     * 创建时间
     */
    @Schema(description = "创建时间", example = "")
    private LocalDateTime createTime;
    /**
     * 班级ID
     */
    @Schema(description = "班级ID", example = "")
    private Long classId;
    /**
     * 测评ID
     */
    @Schema(description = "测评ID", example = "")
    private Long examPaperId;
    /**
     * 学生ID
     */
    @Schema(description = "学生ID", example = "")
    private Long studentId;
    /**
     * 试卷答案
     */
    @Schema(description = "试卷答案", example = "")
    private List<PaperAnswerDTO> paperAnswer;
    /**
     * 学生试卷状态，0-未交卷；1-未批阅；2-被打回；4-已批阅；
     */
    @Schema(description = "学生试卷状态，0-未交卷；1-未批阅；2-被打回；4-已批阅；", example = "")
    private PaperAnswerStatusEnum status;
    /**
     * 得分
     */
    @Schema(description = "得分", example = "")
    @JsonSerialize(using = ScoreJacksonSerialize.class)
    private BigDecimal score;
    /**
     * 题目总分
     */
    @Schema(description = "题目总分", example = "")
    private BigDecimal totalScore;
    /**
     * 题目答对数量
     */
    @Schema(description = "题目答对数量", example = "")
    private Integer questionRightNum;
    /**
     * 题目总数
     */
    @Schema(description = "题目总数", example = "")
    private Integer questionTotal;
    /**
     * 题型总数
     */
    @Schema(description = "题型总数", example = "")
    private Integer questionTypeTotal;
    /**
     * 主观题数量
     */
    @Schema(description = "主观题数量", example = "6")
    private Integer subjectiveQuestionNum;
    /**
     * 客观题数量
     */
    @Schema(description = "客观题数量", example = "6")
    private Integer objectiveQuestionNum;
    /**
     * 是否考试
     */
    @Schema(description = "是否考试", example = "")
    private Integer isExam;
    /**
     * 开始考试时间
     */
    @Schema(description = "开始考试时间", example = "")
    private LocalDateTime startTime;
    /**
     * 提交次数
     */
    @Schema(description = "提交次数", example = "")
    private Integer submitNum;
    /**
     * 提交时间
     */
    @Schema(description = "提交时间", example = "")
    private LocalDateTime submitTime;
    /**
     * 是否限制答题时间
     */
    @Schema(description = "是否限制答题时间", example = "")
    private Integer isLimitAnswerTime;
    /**
     * 考试时长（分钟）
     */
    @Schema(description = "考试时长（分钟）", example = "")
    private BigDecimal examDuration;
    /**
     * 剩余答题时间（分钟）
     */
    @Schema(description = "剩余答题时间（分钟）", example = "")
    private Long remainingAnswerTime;
    /**
     * 答题结束时间
     */
    @Schema(description = "答题结束时间", example = "")
    private LocalDateTime answerEndTime;
    /**
     * 是否已阅
     */
    @Schema(description = "是否已阅", example = "")
    private Integer isMarked;
    /**
     * 催交次数
     */
    @Schema(description = "催交次数", example = "")
    private Integer callNum;
    /**
     * 最后一次催交时间
     */
    @Schema(description = "最后一次催交时间", example = "")
    private LocalDateTime callTime;
    /**
     * 打回次数
     */
    @Schema(description = "打回次数", example = "")
    private Integer repulseNum;
    /**
     * 切屏次数
     */
    @Schema(description = "切屏次数", example = "")
    private Integer screenSwitchNum;

}
